home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_147 / sys / prime / prime.zoo / cinfo.c next >
C/C++ Source or Header  |  1988-07-25  |  4KB  |  138 lines

  1. /*
  2.  *        Character class tables.
  3.  * Do it yourself character classification
  4.  * macros, that understand the multinational character set,
  5.  * and let me ask some questions the standard macros (in
  6.  * ctype.h) don't let you ask.
  7.  *
  8.  * primos specific version
  9.  */
  10. #include    "def.h"
  11.  
  12. /*
  13.  * This table, indexed by a character drawn
  14.  * from the 256 member character set, is used by my
  15.  * own character type macros to answer questions about the
  16.  * type of a character. It handles the full multinational
  17.  * character set, and lets me ask some questions that the
  18.  * standard "ctype" macros cannot ask.
  19.  */
  20. char    cinfo[256] = {
  21.     _C,        _C,        _C,        _C,    /* 0x0X */
  22.     _C,        _C,        _C,        _C,
  23.     _C,        _C,        _C,        _C,
  24.     _C,        _C,        _C,        _C,
  25.     _C,        _C,        _C,        _C,    /* 0x1X */
  26.     _C,        _C,        _C,        _C,
  27.     _C,        _C,        _C,        _C,
  28.     _C,        _C,        _C,        _C,
  29.     0,        _P,        0,        0,    /* 0x2X */
  30.     _W,        _W,        0,        _W,
  31.     0,        0,        0,        0,
  32.     0,        0,        _P,        0,
  33.     _D|_W,        _D|_W,        _D|_W,        _D|_W,    /* 0x3X */
  34.     _D|_W,        _D|_W,        _D|_W,        _D|_W,
  35.     _D|_W,        _D|_W,        0,        0,
  36.     0,        0,        0,        _P,
  37.     0,        _U|_W,        _U|_W,        _U|_W,    /* 0x4X */
  38.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  39.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  40.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  41.     _U|_W,        _U|_W,        _U|_W,        _U|_W,    /* 0x5X */
  42.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  43.     _U|_W,        _U|_W,        _U|_W,        0,
  44.     0,        0,        0,        0,
  45.     0,        _L|_W,        _L|_W,        _L|_W,    /* 0x6X */
  46.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  47.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  48.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  49.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0x7X */
  50.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  51.     _L|_W,        _L|_W,        _L|_W,        0,
  52.     0,        0,        0,        _C,
  53.     _C,        _C,        _C,        _C,    /* 0x8X */
  54.     _C,        _C,        _C,        _C,
  55.     _C,        _C,        _C,        _C,
  56.     _C,        _C,        _C,        _C,
  57.     _C,        _C,        _C,        _C,    /* 0x9X */
  58.     _C,        _C,        _C,        _C,
  59.     _C,        _C,        _C,        _C,
  60.     _C,        _C,        _C,        _C,
  61.     0,        _P,        0,        0,    /* 0xAX */
  62.     _W,        _W,        0,        _W,
  63.     0,        0,        0,        0,
  64.     0,        0,        _P,        0,
  65.     _D|_W,        _D|_W,        _D|_W,        _D|_W,    /* 0xbX */
  66.     _D|_W,        _D|_W,        _D|_W,        _D|_W,
  67.     _D|_W,        _D|_W,        0,        0,
  68.     0,        0,        0,        _P,
  69.     0,        _U|_W,        _U|_W,        _U|_W,    /* 0xCX */
  70.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  71.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  72.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  73.     _U|_W,        _U|_W,        _U|_W,        _U|_W,    /* 0xDX */
  74.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  75.     _U|_W,        _U|_W,        _U|_W,        0,
  76.     0,        0,        0,        0,
  77.     0,        _L|_W,        _L|_W,        _L|_W,    /* 0xEX */
  78.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  79.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  80.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  81.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0xFX */
  82.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  83.     _L|_W,        _L|_W,        _L|_W,        0,
  84.     0,        0,        0,        _C,
  85. };
  86.  
  87. /*
  88.  * Find the name of a keystroke.  Needs to be changed to handle 8-bit printing
  89.  * characters and function keys better.     Returns a pointer to the terminating
  90.  * '\0'.
  91.  */
  92.  
  93. char *keyname(cp, k)
  94. register char *cp;
  95. register int k;
  96. {
  97.     register char *np;
  98. #ifdef    FKEYS
  99.     extern char *keystrings[];
  100. #endif
  101.  
  102.     if(k < 0) k = CHARMASK(k);            /* sign extended char */
  103.     switch(k) {
  104.     case CCHR('@'): np = "NUL"; break;
  105.     case CCHR('I'): np = "TAB"; break;
  106.     case CCHR('J'): np = "LFD"; break; /* yuck, but that's what GNU calls it */
  107.     case CCHR('M'): np = "RET"; break;
  108.     case CCHR('['): np = "ESC"; break;
  109.     case ' ':    np = "SPC"; break; /* yuck again */
  110.     case CCHR('?'): np = "DEL"; break;
  111.     default:
  112. #ifdef    FKEYS
  113.         if(k >= KFIRST && k <= KLAST &&
  114.             (np = keystrings[k - KFIRST]) != NULL)
  115.         break;
  116. #endif
  117.         if(k < CCHR('@')) {
  118.         *cp++ = '0';
  119.         *cp++ = ((k>>6)&7) + '0';
  120.         *cp++ = ((k>>3)&7) + '0';
  121.         *cp++ = (k&7) + '0';
  122.         *cp = '\0';
  123.         return cp;
  124.         }
  125.         if(k < ' ') {
  126.         *cp++ = 'C';
  127.         *cp++ = '-';
  128.         k = CCHR(k);
  129.         if(ISUPPER(k)) k = TOLOWER(k);
  130.         }
  131.         *cp++ = k;
  132.         *cp = '\0';
  133.         return cp;
  134.     }
  135.     (VOID) strcpy(cp, np);
  136.     return cp + strlen(cp);
  137. }
  138.